using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;

using RRHH.Competencias.Entities;
using RRHH.Competencias.DataAccessLayer.Generic;

namespace RRHH.Competencias.DataAccessLayer.SqlServerProvider
{
    public class DALSqlServerPersona:IDALPersona
    {
        public DALSqlServerPersona () { }
        

        #region Miembros de IDALPersona

        public List<Persona> Buscar(long? persona_id, string nombre, string apellido, string telefono, string telefonoMovil)
        {
            try
            {
                DALSqlServerStoredProcedure stored = new DALSqlServerStoredProcedure( "PA_SKILLS_Personas_buscar");
                stored.AgregarParametro("@persona_id", persona_id, typeof(long));
                stored.AgregarParametro("@nombre", nombre, typeof(string));
                stored.AgregarParametro("@apellido", apellido, typeof(string));
                stored.AgregarParametro("@telefono", telefono, typeof(string));
                stored.AgregarParametro("@telefonoMovil", telefonoMovil, typeof(string));

                return CargarLista(stored.ExecuteDataTable());
            }
            catch (Exception ex)
            {

                throw new DALException(ex.Message);
            }
        }

        #endregion


        #region Metodos Privados

        private List<Persona> CargarLista(DataTable dt)
        {
            List<Persona> lsPersonas = new List<Persona>();

            foreach (DataRow row in dt.Rows)
            {
                Persona persona = new Persona(long.Parse(row["persona_id"].ToString()), row["nombre"].ToString(), row["apellido"].ToString());
                if (row["domicilio"] != DBNull.Value) persona.Domicilio = row["domicilio"].ToString();
                if (row["mail"] != DBNull.Value) persona.Mail = row["mail"].ToString();
                if (row["telefono"] != DBNull.Value) persona.Telefono = row["telefono"].ToString();
                if (row["telefonoMovil"] != DBNull.Value) persona.TelefonoMovil = row["telefonoMovil"].ToString();

                lsPersonas.Add(persona);

            }

            return lsPersonas;
        }


        #endregion

        #region Miembros de IDALPersona

        List<Persona> IDALPersona.Buscar(long? persona_id, string nombre, string apellido, string telefono, string telefonoMovil)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion



        #region Miembros de IDALABM<Persona>

        public void Completar(Persona itemCompletar)
        {
            try
            {
                List<Persona> lsPersonas = Buscar(itemCompletar.Id, null, null, null, null);
                if (lsPersonas.Count > 0)
                {
                    //foreach(Persona persona in lsPersonas)
                    //{

                    itemCompletar.Nombre = lsPersonas[0].Nombre;
                    itemCompletar.Apellido = lsPersonas[0].Apellido;
                    itemCompletar.Domicilio = lsPersonas[0].Domicilio;
                    itemCompletar.Mail = lsPersonas[0].Mail;
                    itemCompletar.Telefono = lsPersonas[0].Telefono;
                    itemCompletar.TelefonoMovil = lsPersonas[0].TelefonoMovil;
                        
                    //    break;
                    //}
                }
                else
                {
                    itemCompletar = null;
                }

            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }

        public void Guardar(Persona item)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void GuardarOActualizar(Persona item)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void Actualizar(Persona item)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void Borrar(Persona item)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void Activar(Persona item)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void Desactivar(Persona item)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public List<Persona> BuscarTodos()
        {
            throw new Exception("The method or operation is not implemented.");
        }


        #endregion
    }
}
